/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.util.ArrayList;

import model.Pedido;


/**
 *
 * @author Alex
 */
public class PedidoDAO {

    public boolean criar(Pedido pedido) {
        try {
            Connection conexao = ConectaBanco.getConexao();
            String sql = "insert into pedido(matricula,data_compra,hora_compra,status) values (1,current_timestamp,current_time,0)";
            // seta os parametros no sql
            
            PreparedStatement pstmt = conexao.prepareCall(sql);

            //pstmt.setInt(1, pedido.getMatricula().getMatricula());
            //pstmt.setDate(1,new Date(pedido.getData().getTime()));
            //pstmt.setTime(2, new Time(pedido.getHora().getTime()));
            

            
            pstmt.execute();
            
            conexao.close();
            return true;

        } catch (SQLException sql) {

            return false;

        }
    }

    public ArrayList<Pedido> buscarPorData(Date data_inicial, Date data_final) throws ClassNotFoundException {
        ArrayList<Pedido> pedidos = new ArrayList<Pedido>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from pedido where  data_compra between ? and ? and status=1 ";


            PreparedStatement pst = conexao.prepareStatement(sql);

            pst.setDate(1, data_inicial);
            pst.setDate(2, data_final);
            ResultSet rs = pst.executeQuery();
            MatriculaDAO matriculaDAO = new MatriculaDAO();
                    



            while (rs.next()) {
                Pedido pedido = new Pedido();
         
                pedido.setId(rs.getInt("id"));
                pedido.setMatricula(matriculaDAO.buscarByMatricula(rs.getInt("matricula")));
                pedido.setData(rs.getDate("data_compra"));
                pedido.setHora(rs.getTime("hora"));
                pedido.setStatus(rs.getInt("status"));
              
                pedidos.add(pedido);
            }
            conexao.close();
            return pedidos;

        } catch (SQLException sql) {
            return null;
        }

    }

    public Pedido buscarLoginByCodigo(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from pedido where id=? and status=1");
        sql.setInt(1, codigo);
        ResultSet rs = sql.executeQuery();
        MatriculaDAO matriculaDAO = new MatriculaDAO();

        Pedido pedido = new Pedido();
        while (rs.next()) {
                pedido.setId(rs.getInt("id"));
                pedido.setMatricula(matriculaDAO.buscarByMatricula(rs.getInt("matricula")));
                pedido.setData(rs.getDate("data_compra"));
                pedido.setHora(rs.getTime("hora_compra"));
                pedido.setStatus(rs.getInt("status"));

        }
        conexao.close();
        return pedido;
    }

    public boolean atualizar(Pedido pedido) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update pedido set status=? where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);
            pstmt.setInt(1, pedido.getStatus());
            pstmt.setInt(4, pedido.getId());
            pstmt.execute();
            System.out.println("Cadastro realizado com sucesso");
            conexao.close();
            return true;
        } catch (SQLException sql) {
            System.out.println("Erro ao atualizar registro");
           
            return false;

        }
    }

    public boolean marcarInativo(int id) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update produto set status=0 where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setInt(1, id);


            pstmt.execute();

            conexao.close();
            return true;
        } catch (SQLException sql) {
        
            return false;

        }
    }
        public boolean finalizarCompra(int matricula) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update pedido set status=1, matricula=? where id=(select max(id) from pedido)";

            PreparedStatement pstmt = conexao.prepareCall(sql);
            
            pstmt.setInt(1, matricula);


            pstmt.execute();

            conexao.close();
            return true;
        } catch (SQLException sql) {
        
            return false;

        }
    }
}
